const bdFaceLive = uni.requireNativePlugin('liyahong-BDFace-v4')

//人脸调用
export const face = function () {
	
	return new Promise((resolve,reject) =>{
		let licenseID = plus.os.name == 'Android' ? 'relax-face-face-android' : 'relax-face-face-ios'
		// 调用插件开始采集人脸
		bdFaceLive.liveFace(
			{
				licenseID: licenseID, // 必填项，与百度资料上的License ID保持一致
				/**
				 * Eye： 眨眨眼
				 * Mouth： 张张嘴
				 * HeadLeft： 向左缓慢转头
				 * HeadRight：向右缓慢转头
				 * HeadUp：缓慢抬头
				 * HeadDown：缓慢低头
				 * 
				 * 默认无动作，如果填写了会按照指定动作执行
				 * 注意：这里跟老版的不一样，更符合用户需求
				 */
				liveArray: ['Eye', 'Mouth', 'HeadLeft', 'HeadRight'], // 选填【活体动作】
				liveRandom: true, // 选填【动作是否随机】，默认有序，false：有序|true：随机
				sound: 0, // 选填【是否有声】，默认有声，0：有声|1：无声
				camera: 0, // 选填【前置|后置摄像头】，默认前置，0：前置|1：后置
				openMask: true, // 选填【是否开启戴口罩采集】，默认false不开启
				hintTextColor: '#333333', // 选填【提示文字颜色】，默认#333333
				backgroundColor: '#FFFFFF', // 选填【页面背景颜色】，默认#FFFFFF
				roundColor: '#CCCCCC', // 选填【人脸采集框颜色】，默认#666666
				roundSelectColor: '#FF0000' ,// 选填【识别成功时采集框的颜色】，默认#FF0000
				copyright: '', // 选填【底部版权文字内容】，默认''
				copyrightColor: '#0094FF', // 选填【底部版权文字颜色】，默认#CCCCCC
				showBottomImage: false, // 选填【是否显示底部背景图片】，默认false
				otherImage: false, // 选填【是否返回动作人像信息】，默认false，true：返回base64ImageResult + otherBase64Image，false：只返回base64ImageResult
				originalImage: false, // 选填【是否返回原图照片信息】，默认false，true：返回base64ImageResult + originalBase64Image，false：只返回base64ImageResult
				/**
				 * 0：正常、1：宽松、2：严格
				 * 可以通过quality_config.json配置相关质量属性，具体属性介绍参考文档
				 */
				qualityLevel: 0, // 选填【质量等级】，默认0
				detectTimeOut: 15, // 选填【采集超时时间】，默认15，单位(秒)
				/**
				 * 如果设置为true，页面右上方会多一个相机切换功能入口
				 * 您如果想自定义图片，可以参考文档中的自定义图片说明
				 */
				switchCameraEnable: false, // 选填【是否开启相机切换功能】，默认false
				/**
				 * 如果你希望采集完成之后，需要前端处理完成之后再返回的话，可以将此属性设置为false
				 * 需注意：设置为false之后插件将不会调用关闭页面方法，需要前端手动调用插件的closeLive()方法完成关闭识别页面操作
				 */
				resultBackEnable: true, // 选填【采集完成之后是否返回】，默认true
				tipsModel: {}, // 选填【自定义提示文字内容】，取值可参考文档，不填则使用插件默认提示
				/**
				 * width 和 height属性是用来设置人脸采集预览画面的宽高的
				 * 
				 * 1、如果您仅用于手机端采集的话，插件内部已经对所有手机端进行了适配，此属性无需理会，直接设置0即可
				 * 2、如果您将插件用于平板设备、厂商定制机设备、快递员扫码设备可能会出现预览框人脸被拉伸的情况，
				 * 	  此时您可以来设置width 和 height属性来进行特定的适配，一般设置为width:1080，height:1920即可，
				 * 	  具体根据设备分辨率来设置
				 */
				width: 0, // 选填【自定义预览画面宽度】，默认值0
				height: 0, // 选填【自定义预览画面高度】，默认值0
				soundEnable: true // 选填【是否显示声音图片】默认值：true
			},
			result => {
				/**
				 * code=1时会返回base64ImageResult
				 * 	 + 如果otherImage=true，otherBase64Image也会返回
				 * 	 + 如果originalImage=true，originalBase64Image也会返回
				 * 如果使用百度人脸比对的话建议使用base64ImageResult，这个返回的是最佳人像照片，
				 * 做百度人脸比对是完全没有问题的，也是百度官方推荐的
				 * 
				 * otherBase64Image：经过百度抠图过的人脸照片
				 * originalBase64Image：人脸采集过程中的原图照片
				 */
				switch (result.code) {
					case 1:		// 人脸采集成功
						// this.logResult(result)
						// 调用插件方法进行图片压缩，压缩后的图片在150KB以下
						bdFaceLive.compressBase64Image({
							base64: result.base64ImageResult, // 必填【base64数据】，直接使用插件返回的base64数据即可，不要带前缀
							compressSize: 150 // 选填【期望压缩大小】，默认值150，单位KB
						}, compressResult => {
							if (compressResult.code === 1) { // 压缩成功
								// 获取压缩结果
								const compressData = compressResult.result
								// console.log(compressData)
								// this.faceResult = `data:image/jpg;base64,${compressData.base64}`
								// this.result = '人脸采集成功啦，棒棒哒！'
								// this.checkResultBackEnable()
								
								// 调用插件方法将base64转为图片路径
								bdFaceLive.base64ToFile({
									base64: compressData.base64 // 必填【base64数据】，直接使用插件返回的base64数据即可，不要带前缀
								}, fileResult => {
									// 获取到图片路径，可以直接调用uni.uploadFile上传到自己的服务器
									// 【注意：IOS端使用本地路径无法显示图片，但是上传到服务器是没有问题的，如果需要展示图片，可以直接展示base64】
									resolve(fileResult.result)
									// this.faceResult = fileResult.result
									// this.checkResultBackEnable()
								})
							}
						})
						return
					case -1:	 // 其他错误，如：licenseID没有配置等
							reject({
								message: '客户端错误,请重试',
								code:result.code
							})
						break
					case -2:	 // 活体检测超时
							reject({
								message: '人脸检测超时',
								code:result.code
							})
						break
					case -3:	 // 没有提取到人脸信息
							reject({
								message: '没有检测到人脸信息',
								code:result.code
							})
						break
					case -4:	 // 用户主动关闭
							reject({
								message: '用户主动关闭',
								code:result.code
							})
						break
					case -5: 	 // 权限申请被拒绝，仅Android端支持
							reject({
								message: '权限申请被拒绝',
								code:result.code
							})
						break
					case 100001: // 开始初始化SDK，此处如果用户网络不佳会比较耗时，为了更好的用户体验，建议设置弹窗
						uni.showLoading({
							title: '正在初始化...',
							mask: true
						})
						break
					case 100002: // SDK初始化完成，如果在100001开启了弹窗，可以在这里关闭
						setTimeout(()=> {
							uni.hideLoading()
						}, 1500);
						break
				}
			}
		)
	})
	
};
